package com.zhn;

/**
 * 峰值元素是指其值严格大于左右相邻值的元素。
 * 给你一个整数数组 nums，找到峰值元素并返回其索引。数组可能包含多个峰值，在这种情况下，返回 任何一个峰值 所在位置即可。
 * 你可以假设 nums[-1] = nums[n] = -∞ 。
 * 你必须实现时间复杂度为 O(log n) 的算法来解决此问题
 *
 * 示例 1：
 * 输入：nums = [1,2,3,1]
 * 输出：2
 * 解释：3 是峰值元素，你的函数应该返回其索引 2。
 */

//由于题目保证了 nums[i]≠nums[i+1]
//那么数组 nums中最大值两侧的元素一定严格小于最大值本身。因此，最大值所在的位置就是一个可行的峰值位置

public class FindPeakElement {
    //找局部最大值
    public int findPeakElement(int[] nums) {
        int l = 0;
        int r = nums.length-1;
        while(l < r){
            int mid = (l+r)/2;
            if(nums[mid] > nums[mid+1]){
                r = mid;
            }else {
                l = mid+1;
            }
        }
        return l;
    }
}
